package ve.gob.cne.servicios;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import org.apache.log4j.Logger;

import ve.gob.cne.dao.Dao;
import ve.gob.cne.interfaces.IServicioExtintor;
import ve.gob.cne.to.DependenciaTo;
import ve.gob.cne.to.EstadosTo;
import ve.gob.cne.to.ModeloExtintorTo;
import ve.gob.cne.to.CompuestoTo;
import ve.gob.cne.to.ExtintorTo;
import ve.gob.cne.to.PesoTo;
import ve.gob.cne.to.SedeTo;
import ve.gob.cne.to.TipoFuegoTo;
import ve.gob.cne.to.TipoUbicacionTo;

public class ServicioExtintor implements IServicioExtintor {
	
	private Dao dao;
	private final static Logger logger = Logger
			.getLogger(ServicioExtintor.class);
	
	public void registrarExtintor(ExtintorTo extintor) {
		dao.persist(extintor);
	}
	
	public void registrarTipoFuego(Set<TipoFuegoTo> listaTemp) {
		dao.persist(listaTemp);
	}
	
	public List<TipoFuegoTo> getTipoFuegos(){
		return dao.find(TipoFuegoTo.class);
	}
	
	public List<TipoUbicacionTo> getUbicaciones(){
		return dao.find(TipoUbicacionTo.class);
	}
	
	public List<SedeTo> getSedes(){
		return dao.find(SedeTo.class);
	}
	
	public List<PesoTo> getPesos(){
		return dao.find(PesoTo.class);
	}
	
	public List<ExtintorTo> getExtintores(){
		return dao.find(ExtintorTo.class);
	}
	
	public ExtintorTo getExtintor(long id){
		ExtintorTo extintor = (ExtintorTo) dao.getObjectSession().load(ExtintorTo.class, new Long(id));
		return extintor;
	}
	
	public List<CompuestoTo> getCompuestos(){
		return dao.find(CompuestoTo.class);
	}
	
	public void remove(ExtintorTo extintor){
		dao.persist(extintor);
	}
	
	public List<ModeloExtintorTo> getModelos(){
		return dao.find(ModeloExtintorTo.class);
	}
	/**
	 * @return the dao
	 */
	public Dao getDao() {
		return dao;
	}
	
	/**
	 * @param dao
	 *            the dao to set
	 */
	public void setDao(Dao dao) {
		this.dao = dao;
	}

	@Override
	public List<EstadosTo> getEstados() {
		return dao.find(EstadosTo.class);
	}
	
	@Override
	public List<DependenciaTo> getDependencias() {
		return dao.find(DependenciaTo.class);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<TipoFuegoTo> getTipoFuegosByIdExtintor(long id) {
		List<TipoFuegoTo> fuegos = new ArrayList<TipoFuegoTo>();
		List<Object> objects = null;
		TipoFuegoTo fuegoTo = null;
		try {
			objects =  dao.getObjectSession().createSQLQuery("SELECT t.id, t.descripcion FROM tipo_fuego t, extintor_tipo_fuego e WHERE e.id_extintor =? and t.id = e.id_fuego ORDER BY t.id;").setParameter(0, id).list();
			
			for(Object obj : objects){
				fuegoTo = new TipoFuegoTo();
				Object[] array = (Object[]) obj;
				fuegoTo.setId((Integer) array[0]);
				fuegoTo.setDescripcion((String) array[1]);
				fuegos.add(fuegoTo);
			}
		} catch (Exception e) {
			logger.error("Ha ocurrido un error inesperado con el siguiente mensaje: " + e);
		}
		return fuegos;
	}
}
